package com.mazaiting.generator.service;

import com.mazaiting.common.core.domain.result.Option;
import com.mazaiting.common.core.ex.exceptions.BusinessException;
import com.mazaiting.common.core.ex.exceptions.EmptyObjectException;
import com.mazaiting.generator.domain.entity.ProjectEntity;
import com.mazaiting.generator.domain.form.ProjectForm;
import com.mazaiting.generator.domain.info.ProjectInfo;
import com.mazaiting.generator.domain.query.ProjectQuery;
import com.mazaiting.generator.domain.vo.ProjectVO;
import com.mazaiting.mybatisplus.domain.vo.BasePageVO;

import java.util.List;

/**
 * 项目 服务
 */
public interface IProjectService extends com.baomidou.mybatisplus.extension.service.IService<ProjectEntity> {
    /**
     * 工程列表分页数据
     * @param projectQuery 查询条件
     * @return 分页数据
     */
    BasePageVO<ProjectInfo> page(ProjectQuery projectQuery);

    /**
     * 根据 ID 获取工程信息
     * @param id 工程信息 ID
     * @return 工程信息 VO
     */
    ProjectVO getInfoById(Long id) throws EmptyObjectException;

    /**
     * 新增工程信息
     * @param projectForm 工程信息
     * @return true: 新增成功; false: 新增失败
     */
    boolean save(ProjectForm projectForm);

    /**
     * 修改工程信息
     * @param projectForm 工程信息
     * @return true: 修改成功; false: 修改失败
     */
    boolean update(ProjectForm projectForm) throws EmptyObjectException;

    /**
     * 工程下拉列表
     *
     * @return 工程下拉列表
     */
    List<Option<Long>> listOptions() throws BusinessException;

}